package reflect;

import java.io.File;
import java.lang.reflect.Method;
import java.util.Arrays;

/*
 * 调用与当前类Test2所在同一个保重
 * */
public class test2 {
    public static void main(String[] args) throws Exception {
        //获取当前类所在的目录
        File file = new File(
                test2.class.getResource(".").toURI()
        );
        //获取到当前目录下所有后缀以.class结尾的文件对象
        File[] allFile = file.listFiles(f -> f.getName().endsWith(".class"));
        //遍历筛选出来的文件对象数组
        for (File f : allFile) {
            //将文件名中.class之前的类名截取出来
            String className = f.getName().substring(0, f.getName().indexOf(".class"));
            //因为我们是获取同包类中的类对象，所以我们直接获取当前类的包路径+"."+文件名
            Class cls = Class.forName(test2.class.getPackage().getName() + "." + className);
            Object o = cls.newInstance();   //使用类对象，创建实例对象

            Method[] declaredMethods = cls.getDeclaredMethods();    //获取当前类对象中的所有方法，自己创建的方法
            for (Method m : declaredMethods) {  //遍历获取到的当前类中的所有方法
                if(m.getName().startsWith("s") && m.getParameterCount() == 0){  //当遍历到的方法时以s开头 和 它的参数个数为0时
                    System.out.println(m);
                    m.invoke(o);    //执行满足条件的方法，使用o这个实例来执行
                }
            }
        }
    }
}
